En el contexto de la actual pandemia de COVID-19 muchos ideales de la planificación urbana se han puesto en duda. Uno de ellos, y quizás el más evidente, tiene que ver con los patrones de uso del suelo de los centros de las grandes ciudades.
Pesando en una posible revitalización urbana y en la incoporación de áreas verdes en zonas densas y consolidadas, nos preguntamos:
¿Es posible convertir los estacionamientos concesionados en áreas verdes?
¿Dónde se ubican? ¿Están espacialmente concentrados en el centro?
Consignas
En este trabajo elegiremos a la Ciudad Autónoma de Buenos Aires (CABA) como objeto de estudio.
Nuestro primer paso será cargar los datasets espaciales que incluyen los barrios y las manzanas de la ciudad.
barrios <- st_read ("https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/barrios.geojson")
## Reading layer `barrios_badata' from data source `https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/barrios.geojson' using driver `GeoJSON'
## Simple feature collection with 48 features and 4 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## Geodetic CRS: WGS 84
manzanas <- st_read ("https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/manzanas.geojson")
## Reading layer `manzanas' from data source `https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/manzanas.geojson' using driver `GeoJSON'
## Simple feature collection with 12520 features and 12 fields
## Geometry type: POLYGON
## Dimension: XYZ
## Bounding box: xmin: -58.53042 ymin: -34.70389 xmax: -58.33514 ymax: -34.52755
## z_range: zmin: 0 zmax: 49.894
## Geodetic CRS: WGS 84
La pandemia generó grandes transformaciones en las formas de habitar nuestras ciudades. En esta linea, a partir de los cambios en los patrones de movilidad, grandes espacios de la trama urbana dedicados al transporte, como los estacionamientos, quedaron en desuso, provocando así grandes vacíos urbanos, particularmente, en las zonas céntricas. De igual manera, la coyuntura puso en evidencia la falta de espacios verdes existente en la CABA.
Con el fin de construir una solución que permita reconvertir aquellas superficies obsoletas en espacios verdes y así mejorar la calidad de vida de las personas, en este trabajo analizaremos territorialmente la distribución de los estacionamientos urbanos.
A continuación abriremos los datasets de estacionamientos y de espacios verdes.
estacionamientos <- read.csv("https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/estacionamientos.csv",
stringsAsFactors = TRUE,
encoding = "UTF-8")
espacioverde <- st_read("https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/espacioverdepublico.geojson")
## Reading layer `espacio_verde_publico_WGS84' from data source `https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/espacioverdepublico.geojson' using driver `GeoJSON'
## Simple feature collection with 1731 features and 31 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -58.53175 ymin: -34.70557 xmax: -58.33983 ymax: -34.52657
## Geodetic CRS: WGS 84
Inspeccionamos nuestro dataset principal:
head(estacionamientos)
## long lat id nombre
## 1 -58.38934 -34.58391 1 FACULTAD DE DERECHO
## 2 -58.38222 -34.59424 2 9 DE JULIO e/ Santa Fe y Juncal
## 3 -58.38153 -34.60497 3 OBELISCO NORTE
## 4 -58.38170 -34.60256 4 9 DE JULIO Y LAVALLE
## 5 -58.38105 -34.61424 5 9 DE JULIO e/ Belgrano y México
## 6 -58.37683 -34.59881 6 CÓRDOBA
## tipo direccion_ calle_nombre
## 1 Facultad de Derecho
## 2 Estacionamiento Subterráneo 9 de Julio entre Santa Fe y Juncal
## 3 Estacionamiento Subterráneo 9 DE JULIO AV. y SARMIENTO
## 4 Estacionamiento Subterráneo 9 DE JULIO AV. y LAVALLE
## 5 Estacionamiento Subterráneo 9 de Julio entre Belgrano y México
## 6 Estacionamiento Subterráneo Córdoba entre Florida y Esmeralda
## calle_altura calle_cruce barrio comuna
## 1 NA
## 2 NA 9 de Julio entre Santa Fe y Juncal
## 3 NA 9 DE JULIO AV. y SARMIENTO San Nicolas Comuna 1
## 4 NA 9 DE JULIO AV. y LAVALLE San Nicolas Comuna 1
## 5 NA 9 de Julio entre Belgrano y México
## 6 NA Córdoba entre Florida y Esmeralda
## codigo_postal codigo_postal_argentino
## 1 NA
## 2 NA
## 3 NA
## 4 NA
## 5 NA
## 6 NA
nrow(estacionamientos)
## [1] 49
Hay 49 estacionamientos concesionados, de acuerdo a los datos del GCBA. Como existen missing values en las columnas de barrio y comuna, procederemos a eliminar dichas columnas y refernciar la información de manera espacial. Sólo nos quedaremos con las columnas que nos interesan para el análisis.
estacionamientos <- estacionamientos %>%
#seleccionamos las columnas
select(long, lat, id, nombre, tipo) %>%
#renombramos la columna de longitud, por comodidad
rename(lon=long) %>%
#levantamos el csv espacialmente, tomando los valores de longitud y latitud
st_as_sf(coords = c("lon", "lat"), crs = 4326)
Para saber cuántos estacionamientos concesionados hay por barrio, primero haremos una unión espacial de nuestros datasets.
#primero nos aseguramos que ambos datasets se encuentren en el mismo sistema de coordenadas.
barrios <- st_transform(barrios, crs=st_crs(estacionamientos))
estacionamientos <- st_join (estacionamientos, barrios)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
head(estacionamientos)
## Simple feature collection with 6 features and 7 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -58.38934 ymin: -34.61424 xmax: -58.37683 ymax: -34.58391
## Geodetic CRS: WGS 84
## id nombre tipo barrio
## 1 1 FACULTAD DE DERECHO RECOLETA
## 2 2 9 DE JULIO e/ Santa Fe y Juncal Estacionamiento Subterráneo RETIRO
## 3 3 OBELISCO NORTE Estacionamiento Subterráneo SAN NICOLAS
## 4 4 9 DE JULIO Y LAVALLE Estacionamiento Subterráneo SAN NICOLAS
## 5 5 9 DE JULIO e/ Belgrano y México Estacionamiento Subterráneo MONSERRAT
## 6 6 CÓRDOBA Estacionamiento Subterráneo SAN NICOLAS
## comuna perimetro area geometry
## 1 2 21452.839 6317265 POINT (-58.38934 -34.58391)
## 2 1 18837.989 4512711 POINT (-58.38222 -34.59424)
## 3 1 6548.085 2289008 POINT (-58.38153 -34.60497)
## 4 1 6548.085 2289008 POINT (-58.3817 -34.60256)
## 5 1 6739.222 2198622 POINT (-58.38105 -34.61424)
## 6 1 6548.085 2289008 POINT (-58.37683 -34.59881)
Vemos que se le agregaron las columnas correspondientes a los datos de barrios (barrio, comuna, perímetro, área y geometry)
Paso siguiente, lo agruparemos por barrio y resumiremos por cantidad de estacionamiento. Luego, lo convertiremos en data.frame y eliminaremos la geometría.
estacionamientos_barrio <- estacionamientos %>%
group_by(barrio) %>%
summarise(cantidad=(n())) %>%
st_set_geometry(NULL) %>%
as.data.frame()
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
head(estacionamientos_barrio)
## barrio cantidad
## 1 BALVANERA 7
## 2 BELGRANO 1
## 3 CHACARITA 1
## 4 MONSERRAT 5
## 5 PALERMO 6
## 6 PUERTO MADERO 5
Logramos crear una tabla de datos donde sólo tenemos los nombres de los barrios y la cantidad de estacionamientos concesionados en cada uno de ellos.
Como paso siguiente, uniremos nuevamente nuestro dataset a los datos espaciales de barrios para recuperar la geometría.
estacionamientos_barrio <- left_join(barrios, estacionamientos_barrio, by="barrio")
Visualizamos
ggplot()+
geom_bar(data=estacionamientos_barrio %>% filter(cantidad!=0), aes(y=reorder(barrio, -cantidad), weight=cantidad, fill=barrio), show.legend = FALSE)+
scale_fill_viridis_d()+
labs(x="Cantidad de estacionamientos concesionados",
y="Barrio",
title="¿Cuáles son los barrios con más estacionamientos en la Ciudad?",
caption="Fuente: GCBA")+
scale_x_continuous(breaks = seq(0, 12, 1))+
theme_minimal()
Mapeamos
ggplot()+
geom_sf(data=barrios, fill="white")+
geom_sf(data=estacionamientos_barrio %>% filter(cantidad!=0), aes(fill=cantidad), alpha=.5, show.legend = FALSE)+
geom_sf_text(data=estacionamientos_barrio, aes(label=cantidad), size=4, fontface = "bold")+
scale_fill_viridis_c()+
labs(title="¿Cuántos estacionamientos concesionados hay por barrio?",
caption="Fuente: GCBA")+
theme_void()+
theme(plot.title = element_text( hjust = 0.5))
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning: Removed 39 rows containing missing values (geom_text).
En este primer análisis observamos que el área central de la ciudad concentra casi la mitad de los estacionamientos concesionados de la CABA. A continuación, analizaremos esta cuestión con mayor profundidad.
Nuestro primer paso será geolocalizar las manzanas de la Ciudad. Como estas no cuentan con información del barrio en el que se ubican, procederemos a unir los datasets.
manzanas <- st_join(manzanas, barrios)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
Luego, nos quedaremos con las manzanas pertenecientes a los barrios del microcentro porteño (Balvanera, Monserrat y San Nicolas).
microcentro <- filter(manzanas, barrio=="MONSERRAT" | barrio=="BALVANERA" | barrio=="SAN NICOLAS")
Utilizaremos este último dataset para filtrar los estacionamientos y espacios verdes de la CABA.
estacionamientos <- st_intersection(estacionamientos, microcentro)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
espacioverde <- st_intersection(espacioverde, microcentro)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
Y nos quedamos solo con aquellos estacionamientos que sean al nivel de la vereda.
estacionamientos<- filter(estacionamientos, tipo!="Estacionamiento Subterráneo")
Graficamos
ggplot()+
geom_sf(data = microcentro, fill="grey96")+
geom_sf(data = espacioverde, fill="springgreen2")+
geom_sf(data = estacionamientos, aes(color="Estacionamientos"), size=2)+
scale_color_manual(values = c("Estacionamientos"="blue"))+
labs(title = "¿Dónde se ubican los estacionamientos del Microcentro porteño?",
color="",
subtitle = "",
caption = "Fuente: BA Data")+
theme_void()+
theme(plot.title = element_text(hjust = 0.5),
legend.position = "bottom",
legend.box.background = element_rect(color = "black"),
legend.box.margin = margin(3,6,3,6))
Ahora, analizaremos la ubicación de los estacionamientos en referencia a los espacios verdes y su cobertura. Particularmente, nos centraremos en identificar el rango de manzanas que se puden cubrir a pie en 5 minutos o menos desde un espacio verde.
puntosEspaciosVerdes <- map(1:nrow(espacioverde),function(x){st_sample(espacioverde[x,],size=4)})
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
puntosEspaciosVerdes <- do.call("c",puntosEspaciosVerdes)
puntosEspaciosVerdesSF <- st_as_sf(puntosEspaciosVerdes)
puntosEspaciosVerdesSF <- st_transform(puntosEspaciosVerdesSF,crs=4326)
isocronosEspaciosVerdes <- map(1:nrow(puntosEspaciosVerdesSF),function(x) {cat("Procesando: ",x,"\r")
isoline(puntosEspaciosVerdesSF[x,], transport_mode = "pedestrian",range_type = "time",range = 60*5)})
## Procesando: 1
Procesando: 2
Procesando: 3
Procesando: 4
Procesando: 5
Procesando: 6
Procesando: 7
Procesando: 8
Procesando: 9
Procesando: 10
Procesando: 11
Procesando: 12
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 13
Procesando: 14
Procesando: 15
Procesando: 16
Procesando: 17
Procesando: 18
Procesando: 19
Procesando: 20
Procesando: 21
Procesando: 22
Procesando: 23
Procesando: 24
Procesando: 25
Procesando: 26
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 27
Procesando: 28
Procesando: 29
Procesando: 30
Procesando: 31
Procesando: 32
Procesando: 33
Procesando: 34
Procesando: 35
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 36
Procesando: 37
Procesando: 38
Procesando: 39
Procesando: 40
Procesando: 41
Procesando: 42
Procesando: 43
Procesando: 44
Procesando: 45
Procesando: 46
Procesando: 47
Procesando: 48
Procesando: 49
Procesando: 50
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 51
Procesando: 52
Procesando: 53
Procesando: 54
Procesando: 55
Procesando: 56
Procesando: 57
Procesando: 58
Procesando: 59
Procesando: 60
Procesando: 61
Procesando: 62
Procesando: 63
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 64
Procesando: 65
Procesando: 66
Procesando: 67
Procesando: 68
Procesando: 69
Procesando: 70
Procesando: 71
Procesando: 72
Procesando: 73
Procesando: 74
Procesando: 75
Procesando: 76
Procesando: 77
Procesando: 78
Procesando: 79
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 80
Procesando: 81
Procesando: 82
Procesando: 83
Procesando: 84
Procesando: 85
Procesando: 86
Procesando: 87
Procesando: 88
Procesando: 89
Procesando: 90
Procesando: 91
Procesando: 92
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 93
Procesando: 94
Procesando: 95
Procesando: 96
Procesando: 97
Procesando: 98
Procesando: 99
Procesando: 100
Procesando: 101
Procesando: 102
Procesando: 103
Procesando: 104
Procesando: 105
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 106
Procesando: 107
Procesando: 108
Procesando: 109
Procesando: 110
Procesando: 111
Procesando: 112
Procesando: 113
Procesando: 114
Procesando: 115
Procesando: 116
Procesando: 117
Procesando: 118
Procesando: 119
Procesando: 120
Procesando: 121
Procesando: 122
Procesando: 123
Procesando: 124
Procesando: 125
Procesando: 126
Procesando: 127
Procesando: 128
Procesando: 129
Procesando: 130
Procesando: 131
Procesando: 132
Procesando: 133
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 134
Procesando: 135
Procesando: 136
Procesando: 137
Procesando: 138
Procesando: 139
Procesando: 140
Procesando: 141
Procesando: 142
Procesando: 143
Procesando: 144
Procesando: 145
Procesando: 146
Procesando: 147
Procesando: 148
Procesando: 149
Procesando: 150
Procesando: 151
Procesando: 152
Procesando: 153
Procesando: 154
Procesando: 155
Procesando: 156
Procesando: 157
Procesando: 158
Procesando: 159
Procesando: 160
Procesando: 161
Procesando: 162
Procesando: 163
Procesando: 164
Procesando: 165
Procesando: 166
Procesando: 167
Procesando: 168
Procesando: 169
Procesando: 170
Procesando: 171
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 172
Procesando: 173
Procesando: 174
Procesando: 175
Procesando: 176
Procesando: 177
Procesando: 178
Procesando: 179
Procesando: 180
Procesando: 181
Procesando: 182
Procesando: 183
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 184
Procesando: 185
Procesando: 186
Procesando: 187
Procesando: 188
Procesando: 189
Procesando: 190
Procesando: 191
Procesando: 192
Procesando: 193
Procesando: 194
Procesando: 195
Procesando: 196
Procesando: 197
Procesando: 198
Procesando: 199
Procesando: 200
Procesando: 201
Procesando: 202
Procesando: 203
Procesando: 204
Procesando: 205
Procesando: 206
Procesando: 207
Procesando: 208
Procesando: 209
Procesando: 210
Procesando: 211
Procesando: 212
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 213
Procesando: 214
Procesando: 215
Procesando: 216
Procesando: 217
Procesando: 218
Procesando: 219
Procesando: 220
Procesando: 221
Procesando: 222
Procesando: 223
Procesando: 224
Procesando: 225
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 226
Procesando: 227
Procesando: 228
Procesando: 229
Procesando: 230
Procesando: 231
Procesando: 232
Procesando: 233
Procesando: 234
Procesando: 235
Procesando: 236
Procesando: 237
Procesando: 238
Procesando: 239
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 240
Procesando: 241
Procesando: 242
Procesando: 243
Procesando: 244
Procesando: 245
Procesando: 246
Procesando: 247
Procesando: 248
Procesando: 249
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 250
Procesando: 251
Procesando: 252
Procesando: 253
Procesando: 254
Procesando: 255
Procesando: 256
Procesando: 257
Procesando: 258
Procesando: 259
Procesando: 260
Procesando: 261
Procesando: 262
Procesando: 263
Procesando: 264
Procesando: 265
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 266
Procesando: 267
Procesando: 268
Procesando: 269
Procesando: 270
Procesando: 271
Procesando: 272
Procesando: 273
Procesando: 274
Procesando: 275
Procesando: 276
Procesando: 277
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 278
Procesando: 279
Procesando: 280
Procesando: 281
Procesando: 282
Procesando: 283
Procesando: 284
Procesando: 285
Procesando: 286
Procesando: 287
Procesando: 288
Procesando: 289
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 290
Procesando: 291
Procesando: 292
Procesando: 293
Procesando: 294
Procesando: 295
Procesando: 296
Procesando: 297
Procesando: 298
Procesando: 299
Procesando: 300
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 301
Procesando: 302
Procesando: 303
Procesando: 304
Procesando: 305
Procesando: 306
Procesando: 307
Procesando: 308
Procesando: 309
Procesando: 310
Procesando: 311
Procesando: 312
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 313
Procesando: 314
Procesando: 315
Procesando: 316
Procesando: 317
Procesando: 318
Procesando: 319
Procesando: 320
Procesando: 321
Procesando: 322
Procesando: 323
Procesando: 324
Procesando: 325
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
## Procesando: 326
Procesando: 327
Procesando: 328
Procesando: 329
Procesando: 330
Procesando: 331
Procesando: 332
Procesando: 333
Procesando: 334
Procesando: 335
Procesando: 336
isocronosEspaciosVerdesJuntas <- do.call(rbind,isocronosEspaciosVerdes)
isocronosEspaciosVerdesJuntasUnion <- st_union(isocronosEspaciosVerdesJuntas)
## although coordinates are longitude/latitude, st_union assumes that they are planar
isocronosEspaciosVerdesJuntasUnion <- st_as_sf(isocronosEspaciosVerdesJuntasUnion) %>%
mutate(cobertura=TRUE)
Graficamos
ggplot()+
geom_sf(data = microcentro, fill="grey96")+
geom_sf(data = espacioverde, fill="springgreen2")+
geom_sf(data = estacionamientos, aes(color="Estacionamientos"), size=2)+
geom_sf(data = isocronosEspaciosVerdesJuntasUnion, aes(fill="Cobertura de espacios verdes"), alpha=0.25, color="black")+
scale_color_manual(values = c("Estacionamientos"="blue"))+
scale_fill_manual(values = c("Cobertura de espacios verdes"="lightgreen"))+
labs(title = "¿Cuál es la cobertura de espacios verdes del Microcentro?",
color="",
fill="",
subtitle = "Manzanas a 5 min. o menos de un espacio verde",
caption = "Fuente: BA Data")+
theme_void()+
theme(plot.title = element_text(hjust = 0.5, face="bold"),
plot.subtitle = element_text(hjust = 0.5),
legend.position = "bottom",
legend.box.background = element_rect(color = "black"),
legend.box.margin = margin(3,6,3,6))
Ahora comparemos los estacionamientos, pero utilizando las estaciones de Ecobicis y su cobertura como referencia. Repitamos el proceso.
bbox_microcentro <- as.numeric(st_bbox(microcentro))
mapamicrocentro <- get_stamenmap(bbox = bbox_microcentro,
maptype = "toner-lite",
zoom=15)
## Source : http://tile.stamen.com/toner-lite/15/11066/19744.png
## Source : http://tile.stamen.com/toner-lite/15/11067/19744.png
## Source : http://tile.stamen.com/toner-lite/15/11068/19744.png
## Source : http://tile.stamen.com/toner-lite/15/11069/19744.png
## Source : http://tile.stamen.com/toner-lite/15/11070/19744.png
## Source : http://tile.stamen.com/toner-lite/15/11071/19744.png
## Source : http://tile.stamen.com/toner-lite/15/11066/19745.png
## Source : http://tile.stamen.com/toner-lite/15/11067/19745.png
## Source : http://tile.stamen.com/toner-lite/15/11068/19745.png
## Source : http://tile.stamen.com/toner-lite/15/11069/19745.png
## Source : http://tile.stamen.com/toner-lite/15/11070/19745.png
## Source : http://tile.stamen.com/toner-lite/15/11071/19745.png
## Source : http://tile.stamen.com/toner-lite/15/11066/19746.png
## Source : http://tile.stamen.com/toner-lite/15/11067/19746.png
## Source : http://tile.stamen.com/toner-lite/15/11068/19746.png
## Source : http://tile.stamen.com/toner-lite/15/11069/19746.png
## Source : http://tile.stamen.com/toner-lite/15/11070/19746.png
## Source : http://tile.stamen.com/toner-lite/15/11071/19746.png
bicis <- st_read("https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis.geojson")
## Reading layer `estaciones_de_bicicletas_WGS84' from data source `https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis.geojson' using driver `GeoJSON'
## Simple feature collection with 229 features and 7 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: -58.51142 ymin: -34.66051 xmax: -58.35574 ymax: -34.5445
## Geodetic CRS: WGS 84
bicis <- st_intersection(bicis, microcentro)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
isocronosbicis <- map(1:nrow(bicis),function(x) {cat("Procesando: ",x,"\r")
isoline(bicis[x,], transport_mode = "pedestrian",range_type = "time",range = 60*5)})
## Procesando: 1
Procesando: 2
Procesando: 3
Procesando: 4
Procesando: 5
Procesando: 6
Procesando: 7
Procesando: 8
Procesando: 9
Procesando: 10
Procesando: 11
Procesando: 12
Procesando: 13
Procesando: 14
## Warning in .parse_response(i, out$responses()[[i]]): Request 'id = 1' failed:
## Status 429.
isocronosbicisjuntas <- do.call(rbind,isocronosbicis)
isocronosbicisjuntasunion <- st_union(isocronosbicisjuntas)
## although coordinates are longitude/latitude, st_union assumes that they are planar
isocronosbicisjuntasunion <- st_as_sf(isocronosbicisjuntasunion) %>%
mutate(cobertura=TRUE)
Grafiquemos
ggmap(mapamicrocentro)+
geom_sf(data = microcentro, fill="grey96", inherit.aes = FALSE)+
geom_sf(data = espacioverde, fill="mediumseagreen", inherit.aes = FALSE)+
geom_sf(data=bicis, aes(color="Ecobicis"), size=2, inherit.aes = FALSE)+
geom_sf(data = estacionamientos, aes(color="Estacionamientos"), size=2, inherit.aes = FALSE)+
geom_sf(data = isocronosbicisjuntasunion, aes(fill="A 5 min o menos a pie de una estación de Ecobicis"), color="coral1", alpha=0.20, color="black", inherit.aes = FALSE)+
scale_fill_manual(values = c("A 5 min o menos a pie de una estación de Ecobicis"="chocolate2"))+
scale_color_manual(values = c("Estacionamientos"="blue", "Ecobicis"="orangered"))+
labs(title = "¿Y si transformamos los estacionamientos del centro porteño en espacios verdes?",
subtitle = "",
fill="",
color="",
caption = "Fuente: BA Data")+
theme_void()+
theme(plot.title = element_text(size= 12, hjust = 0.5, face="bold"),
plot.caption=element_text(face = "italic", size=8),
legend.position = "bottom",
legend.box.background = element_rect(color = "black"),
legend.box.margin = margin(3,6,3,6))
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
## Warning: Duplicated aesthetics after name standardisation: colour
Consignas
Primero, creamos la caja de coordenadas de la CABA.
bbox_CABA <- getbb("Ciudad Autónoma de Buenos Aires, Argentina")
Nos fijamos que las coordenadas extraídas sean las precisas.
mapa_CABA <- get_stamenmap(bbox = bbox_CABA,
maptype = "terrain",
zoom=12)
## Source : http://tile.stamen.com/terrain/12/1382/2467.png
## Source : http://tile.stamen.com/terrain/12/1383/2467.png
## Source : http://tile.stamen.com/terrain/12/1384/2467.png
## Source : http://tile.stamen.com/terrain/12/1382/2468.png
## Source : http://tile.stamen.com/terrain/12/1383/2468.png
## Source : http://tile.stamen.com/terrain/12/1384/2468.png
## Source : http://tile.stamen.com/terrain/12/1382/2469.png
## Source : http://tile.stamen.com/terrain/12/1383/2469.png
## Source : http://tile.stamen.com/terrain/12/1384/2469.png
ggmap(mapa_CABA)+
theme_void()
Segundo, creamos un dataset con las calles de CABA. Para ello:
1º. Consultamos la info disponible.
CABA_calles <- opq(bbox_CABA) %>%
add_osm_feature(key="highway")
2º. Descargamos la info.
CABA_calles <- osmdata_sf(CABA_calles)
3º. Seleccionamos solo las líneas y las asignamos a nuestra lista para que se transfome en un dataset.
CABA_calles <- CABA_calles$osm_lines
Graficamos para ver el resultado
ggmap(mapa_CABA)+
geom_sf(data = CABA_calles, color="deepskyblue4", alpha=0.5, inherit.aes = FALSE)+
labs(title="Calles de la Ciudad Autónoma de Buenos Aires",
caption="Fuente: Open Street Map")+
theme_void()+
theme(plot.title = element_text(hjust = 0.5))
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
Como vemos, no solo nos descarga las calles de la CABA sino de todo el sistema de coordenadas. Para solucionar ese problema, haremos lo siguiente:
1º Descargamos el límite de la CABA.
bbox_CABA_limite <- getbb("Ciudad Autónoma de Buenos Aires, Argentina", format_out = "sf_polygon")
bbox_CABA_limite <- bbox_CABA_limite$multipolygon
ggmap(mapa_CABA)+
geom_sf(data=bbox_CABA_limite, fill=NA, size=1, color="firebrick3", inherit.aes = FALSE)+
labs(title="Ciudad Autónoma de Buenos Aires",
caption="Fuente: Open Street Map")+
theme_void()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
2º Intersectamos nuestro dataset de calles con el del límite.
CABA_calles <- st_intersection(CABA_calles, bbox_CABA_limite)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
Graficamos
ggmap(mapa_CABA)+
geom_sf(data=bbox_CABA_limite, fill=NA, size=1, color="firebrick3", inherit.aes = FALSE)+
geom_sf(data = CABA_calles, color="deepskyblue4", alpha=0.5, inherit.aes = FALSE)+
labs(title="Calles de la Ciudad Autónoma de Buenos Aires",
caption="Fuente: Open Street Map")+
theme_void()+
theme(plot.title = element_text(hjust = 0.5))
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
Por último, coloreamos nuestras calles de acuerdo a la velocidad máxima permitida.
CABA_calles <- mutate(CABA_calles, maxspeed= fct_relevel(maxspeed, "5", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100", "130"))
ggmap(mapa_CABA)+
geom_sf(data = filter(CABA_calles, !(is.na(maxspeed))), aes(color=maxspeed), fill=NA, inherit.aes = FALSE)+
scale_color_viridis_d()+
labs(title="Calles de la Ciudad Autónoma de Buenos Aires",
color="Velocidad máxima (KM/H)",
caption="Fuente: Open Street Map")+
theme_void()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
En línea con nuestro trabajo anterior, procederemos a descargar los estacionamientos de la CABA.
parking_CABA_OSM <- opq (bbox_CABA) %>%
add_osm_feature(key="building", value="parking")
parking_CABA_OSM <- osmdata_sf(parking_CABA_OSM)
parking_CABA_OSM <- parking_CABA_OSM$osm_points
Graficamos para ver su ubicación.
ggmap(mapa_CABA)+
geom_sf(data = parking_CABA_OSM, aes(color="Estacionamientos"), inherit.aes = FALSE)+
scale_color_manual(values = c("Estacionamientos"="red2"))+
labs(title="Ciudad Autónoma de Buenos Aires",
color="Referencias",
caption="Fuente: Open Street Map")+
theme_void()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
Al igual que hicimos con las calles, nos quedaremos unicamente con los estacionamientos que se encuentren dentro de la CABA.
parking_CABA_OSM <- st_intersection(parking_CABA_OSM, bbox_CABA_limite)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
Nos quedamos solo con los valores únicos.
parking_CABA_OSM <- unique(parking_CABA_OSM)
Graficamos para ver los resultados
ggmap(mapa_CABA)+
geom_sf(data = parking_CABA_OSM, aes(color="Estacionamientos"), inherit.aes = FALSE)+
scale_color_manual(values = c("Estacionamientos"="red2"))+
labs(title="Ciudad Autónoma de Buenos Aires",
color="Referencias",
caption="Fuente: Open Street Map")+
theme_void()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
Al ver el mapa anterior, podemos observar que hay algo que no anda bien. Nuestro dataset de estacionamientos contiene 87 registros, aunque sólo aparecen geolocalizados unos pocos puntos. Ello puede deberse a que la posición de los mismos está mal cargada.
No obstante, en Open Street Maps es posible encontrar que los estacionamientos se encuentran divididos en múltiples categorías. Probemos con otra categoría mucho más amplia que la original y repitamos el proceso:
parking_CABA_OSM_B <- opq (bbox_CABA) %>%
add_osm_feature(key="amenity", value="parking")
parking_CABA_OSM_B <- osmdata_sf(parking_CABA_OSM_B)
parking_CABA_OSM_B <- parking_CABA_OSM_B$osm_points
parking_CABA_OSM_B <- st_intersection(parking_CABA_OSM_B, bbox_CABA_limite)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
parking_CABA_OSM_B <- unique(parking_CABA_OSM_B)
Grafiquemos
ggmap(mapa_CABA)+
geom_sf(data = parking_CABA_OSM_B, aes(color="Estacionamientos"), inherit.aes = FALSE)+
scale_color_manual(values = c("Estacionamientos"="red2"))+
labs(title="Ciudad Autónoma de Buenos Aires",
color="Referencias",
caption="Fuente: Open Street Map")+
theme_void()
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
Como podemos ver en el mapa anterior, la mayor concentración de estacionamientos se da en el corredor que se extiende desde el centro de la CABA hacia el norte. No obstante, es importante reconocer que los estacionamientos se muestran distribudios a lo largo y ancho de la ciudad.
Ahora, crucemos nuestro dataset de estacionamientos con el de barrios para conocer su distribución por cada uno de estos.
parking_CABA_OSM_B <- st_transform(parking_CABA_OSM_B, crs = st_crs(barrios))
parking_CABA_OSM_B <- st_join(parking_CABA_OSM_B, barrios)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
Agrupemos los casos por barrio.
parking_CABA_OSM_barrio <- parking_CABA_OSM_B %>%
group_by(barrio) %>%
summarise(Q_estacionamientos=(n())) %>%
st_set_geometry(NULL) %>%
as.data.frame() %>%
filter(!is.na(barrio))
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
## although coordinates are longitude/latitude, st_union assumes that they are planar
Grafiquemos.
ggplot()+
geom_bar(data=parking_CABA_OSM_barrio %>% filter(Q_estacionamientos !=0), aes(y=reorder(barrio, -Q_estacionamientos), weight=Q_estacionamientos, fill=barrio), show.legend = FALSE)+
scale_fill_viridis_d()+
labs(x="Cantidad de estacionamientos",
y="Barrio",
title="¿Cuántos estacionamientos por barrio existen en la CABA \n\ según OSM?",
caption="Fuente: OSM")+
scale_x_continuous(breaks = seq(0, 500, 50))+
theme_minimal()
parking_CABA <- left_join(barrios, parking_CABA_OSM_barrio, by="barrio")
Visualizamos
ggplot()+
geom_sf(data=barrios, fill="white")+
geom_sf(data=parking_CABA %>% filter(Q_estacionamientos!=0), aes(fill=Q_estacionamientos), alpha=.5, show.legend = FALSE)+
geom_sf_text(data=parking_CABA, aes(label=Q_estacionamientos), size=4, fontface = "bold")+
scale_fill_viridis_c()+
labs(title="¿Cuántos estacionamientos concesionados hay por barrio según OSM?",
caption="Fuente: OSM")+
theme_void()+
theme(plot.title = element_text( hjust = 0.5))
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning: Removed 3 rows containing missing values (geom_text).
Comparemoslo con nuestro GEOJSON original.
ggplot()+
geom_sf(data=barrios, fill="white")+
geom_sf(data=estacionamientos_barrio %>% filter(cantidad!=0), aes(fill=cantidad), alpha=.5, show.legend = FALSE)+
geom_sf_text(data=estacionamientos_barrio, aes(label=cantidad), size=4, fontface = "bold")+
scale_fill_viridis_c()+
labs(title="¿Cuántos estacionamientos concesionados hay por barrio?",
caption="Fuente: GCBA")+
theme_void()+
theme(plot.title = element_text( hjust = 0.5))
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning: Removed 39 rows containing missing values (geom_text).
La primer observación que obtenemos es que nuestro N aumento considerablemente. Luego, si bien la mayor concentración de estacionamientos se da en el eje Centro - Norte de la CABA (siendo Palermo el principal barrio ahora), existe una oferta cosiderable en barrios perífericos como Lugano, Caballito, La Boca, Flores y Villa Soldati.
Estas diferencias pueden deverse a varios factores. Sin embargo, es importante reconocer que, mientras nuestro GEOJSON original nos daba sólo la ubicación de los estacionamientos concesionados, el nuevo dataset con datos de OSM ofrece información de todos los tipos de estacionamientos existentes en la CABA.
Veamos las diferencias con mayor precisión:
estacionamientos_barrio[is.na(estacionamientos_barrio)] <- 0
parking_OSM_GCBA <- left_join(parking_CABA_OSM_barrio, estacionamientos_barrio, by="barrio") %>%
rename("cantidad_GCBA"="cantidad") %>%
group_by(barrio, Q_estacionamientos, cantidad_GCBA) %>%
summarise(diferencia= Q_estacionamientos-cantidad_GCBA)
## `summarise()` has grouped output by 'barrio', 'Q_estacionamientos'. You can override using the `.groups` argument.
head(parking_OSM_GCBA, y=reorder(barrio, -diferencia))
## # A tibble: 6 x 4
## # Groups: barrio, Q_estacionamientos [6]
## barrio Q_estacionamientos cantidad_GCBA diferencia
## <chr> <int> <dbl> <dbl>
## 1 AGRONOMIA 39 0 39
## 2 ALMAGRO 71 0 71
## 3 BALVANERA 168 7 161
## 4 BARRACAS 68 0 68
## 5 BELGRANO 319 1 318
## 6 BOCA 108 0 108
ggplot()+
geom_bar(data=parking_OSM_GCBA, aes(y=reorder(barrio, -Q_estacionamientos), weight=Q_estacionamientos, fill=barrio), show.legend = FALSE)+
geom_bar(data=parking_OSM_GCBA, aes(y=reorder(barrio, -Q_estacionamientos), weight=cantidad_GCBA, fill=barrio), fill="red", show.legend = FALSE)+
scale_fill_viridis_d()+
labs(x="Diferencia (cantidad de estacionamientos)",
y="Barrio",
title="¿Cuánto difieren los datos de OSM con respecto a los del GCBA?",
caption="Fuente: GCBA + OSM",
fill="Estacionamientos GCBA")+
scale_x_continuous(breaks = seq(0, 500, 50))+
theme_minimal()
Mapeamos las diferencias para el área del Microcentro porteño.
parking_microcentro <- parking_CABA_OSM_B %>%
filter(barrio=="MONSERRAT" | barrio=="BALVANERA" | barrio=="SAN NICOLAS") %>%
filter(parking!="underground" | layer!="-1")
ggplot()+
geom_sf(data = microcentro, fill="grey96")+
geom_sf(data = espacioverde, fill="springgreen2")+
geom_sf(data = estacionamientos, aes(color="Estacionamientos GCBA"), size=2, alpha=0.5)+
geom_sf(data=parking_microcentro, aes(color="Estacionamientos OSM"), size=2, alpha=0.5)+
scale_color_manual(values = c("Estacionamientos GCBA"="blue", "Estacionamientos OSM"="red"))+
labs(title = "¿Dónde se ubican los estacionamientos del Microcentro porteño \n según las distintas fuentes?",
color="",
subtitle = "",
caption = "Fuente: BA Data")+
theme_void()+
theme(plot.title = element_text(hjust = 0.5),
legend.position = "bottom",
legend.box.background = element_rect(color = "black"),
legend.box.margin = margin(3,6,3,6))
Como podemos observar, las diferencias entre los datos provistos por el GEOJSON y los datos recolectados por OSM divergen considerablemente. Esto es así de tal manera que ambos sets de datos sólo coinciden en la ubicación de dos estacionamientos.
Consignas
En esta parte del trabajo, retomaremos el análisis de las ecobicis y los viajes realizados en el área central de la Ciudad de Buenos Aires. Ello nos permitirá estudiar con mayor precisión el nivel de movilidad en el área durante la pandemia y hacer suposiciones sobre como podría impactar la promoción de nuevos espacios verdes en la zona.
Con este fin, utilizaremos el datset de viajes en bicicleta del año 2020:
ACLARACIÓN: Debido al tamaño del dataset original y su imposibilidad de subirlo a github, optamos por utilizar una versión más pequeña que solo contiene los viajes iniciados en estaciones del Microcentro porteño.
bicis_2020 <- read_csv("https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv")
## Warning: Missing column names filled in: 'X1' [1]
##
## -- Column specification --------------------------------------------------------
## cols(
## .default = col_double(),
## fecha_origen_recorrido = col_datetime(format = ""),
## nombre_estacion_origen = col_character(),
## MANZANA = col_character(),
## SECCION = col_character(),
## OBS = col_logical(),
## MZ_TIPO = col_character(),
## LFI = col_character(),
## LIB = col_character(),
## SM = col_character(),
## barrio = col_character(),
## geometry = col_character()
## )
## i Use `spec()` for the full column specifications.
## Warning: 109490 parsing failures.
## row col expected actual file
## 1 -- 24 columns 26 columns 'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'
## 2 -- 24 columns 26 columns 'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'
## 3 -- 24 columns 26 columns 'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'
## 4 -- 24 columns 26 columns 'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'
## 5 -- 24 columns 26 columns 'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'
## ... ... .......... .......... .....................................................................................
## See problems(...) for more details.
str(bicis_2020)
## spec_tbl_df [109,490 x 24] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ X1 : num [1:109490] 14674 14675 14676 14677 14678 ...
## $ duracion_recorrido : num [1:109490] 1570 1648 1283 1700 1772 ...
## $ id_estacion_origen : num [1:109490] 51 51 51 51 51 51 51 51 51 51 ...
## $ fecha_origen_recorrido: POSIXct[1:109490], format: "2020-12-11 20:40:27" "2020-11-21 18:05:19" ...
## $ nombre_estacion_origen: chr [1:109490] "051 - TUCUMAN" "051 - TUCUMAN" "051 - TUCUMAN" "051 - TUCUMAN" ...
## $ lon : num [1:109490] -58.4 -58.4 -58.4 -58.4 -58.4 ...
## $ lat : num [1:109490] -34.6 -34.6 -34.6 -34.6 -34.6 ...
## $ FeatId1 : num [1:109490] 5507 5507 5507 5507 5507 ...
## $ MANZANA : chr [1:109490] "063B" "063B" "063B" "063B" ...
## $ SECCION : chr [1:109490] "005" "005" "005" "005" ...
## $ NIVEL : num [1:109490] 15.8 15.8 15.8 15.8 15.8 15.8 15.8 15.8 15.8 15.8 ...
## $ OBS : logi [1:109490] NA NA NA NA NA NA ...
## $ MZ_TIPO : chr [1:109490] "TIPICA" "TIPICA" "TIPICA" "TIPICA" ...
## $ CANT_LADOS : num [1:109490] 4 4 4 4 4 4 4 4 4 4 ...
## $ MZ_SUP : num [1:109490] 1903 1903 1903 1903 1903 ...
## $ CANT_PA : num [1:109490] 0 0 0 0 0 0 0 0 0 0 ...
## $ LFI : chr [1:109490] "NO" "NO" "NO" "NO" ...
## $ LIB : chr [1:109490] "NO" "NO" "NO" "NO" ...
## $ SM : chr [1:109490] "005-063B" "005-063B" "005-063B" "005-063B" ...
## $ barrio : chr [1:109490] "SAN NICOLAS" "SAN NICOLAS" "SAN NICOLAS" "SAN NICOLAS" ...
## $ comuna : num [1:109490] 1 1 1 1 1 1 1 1 1 1 ...
## $ perimetro : num [1:109490] 6548 6548 6548 6548 6548 ...
## $ area : num [1:109490] 2289008 2289008 2289008 2289008 2289008 ...
## $ geometry : chr [1:109490] "c(-58.3821223276689" "c(-58.3821223276689" "c(-58.3821223276689" "c(-58.3821223276689" ...
## - attr(*, "problems")= tibble [109,490 x 5] (S3: tbl_df/tbl/data.frame)
## ..$ row : int [1:109490] 1 2 3 4 5 6 7 8 9 10 ...
## ..$ col : chr [1:109490] NA NA NA NA ...
## ..$ expected: chr [1:109490] "24 columns" "24 columns" "24 columns" "24 columns" ...
## ..$ actual : chr [1:109490] "26 columns" "26 columns" "26 columns" "26 columns" ...
## ..$ file : chr [1:109490] "'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'" "'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'" "'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'" "'https://raw.githubusercontent.com/MEU-CDPC2/TPS/main/Datasets/bicis_microcentro.csv'" ...
## - attr(*, "spec")=
## .. cols(
## .. X1 = col_double(),
## .. duracion_recorrido = col_double(),
## .. id_estacion_origen = col_double(),
## .. fecha_origen_recorrido = col_datetime(format = ""),
## .. nombre_estacion_origen = col_character(),
## .. lon = col_double(),
## .. lat = col_double(),
## .. FeatId1 = col_double(),
## .. MANZANA = col_character(),
## .. SECCION = col_character(),
## .. NIVEL = col_double(),
## .. OBS = col_logical(),
## .. MZ_TIPO = col_character(),
## .. CANT_LADOS = col_double(),
## .. MZ_SUP = col_double(),
## .. CANT_PA = col_double(),
## .. LFI = col_character(),
## .. LIB = col_character(),
## .. SM = col_character(),
## .. barrio = col_character(),
## .. comuna = col_double(),
## .. perimetro = col_double(),
## .. area = col_double(),
## .. geometry = col_character()
## .. )
Como podemos ver, nuestro dataset ya cuenta con los registros de fecha y hora en su formato correspondiente, por lo que ya podemos trabajar sobre los datos.
A fin de lograr una mayor precisión temporal, realizaremos algunas otras modificaciones al dataset.
bicis_2020 <- bicis_2020 %>%
mutate(dia = wday(fecha_origen_recorrido, label = TRUE, abbr = FALSE),
mes = month(fecha_origen_recorrido, label = TRUE, abbr = FALSE))
bicis_2020 <- bicis_2020 %>%
mutate(hora = hour(fecha_origen_recorrido))
head(bicis_2020)
## # A tibble: 6 x 27
## X1 duracion_recorri~ id_estacion_orig~ fecha_origen_recor~ nombre_estacion~
## <dbl> <dbl> <dbl> <dttm> <chr>
## 1 14674 1570 51 2020-12-11 20:40:27 051 - TUCUMAN
## 2 14675 1648 51 2020-11-21 18:05:19 051 - TUCUMAN
## 3 14676 1283 51 2020-11-13 18:32:19 051 - TUCUMAN
## 4 14677 1700 51 2020-11-10 18:14:46 051 - TUCUMAN
## 5 14678 1772 51 2020-11-02 17:35:41 051 - TUCUMAN
## 6 14679 1498 51 2020-10-06 16:14:48 051 - TUCUMAN
## # ... with 22 more variables: lon <dbl>, lat <dbl>, FeatId1 <dbl>,
## # MANZANA <chr>, SECCION <chr>, NIVEL <dbl>, OBS <lgl>, MZ_TIPO <chr>,
## # CANT_LADOS <dbl>, MZ_SUP <dbl>, CANT_PA <dbl>, LFI <chr>, LIB <chr>,
## # SM <chr>, barrio <chr>, comuna <dbl>, perimetro <dbl>, area <dbl>,
## # geometry <chr>, dia <ord>, mes <ord>, hora <int>
Como vemos, la columna “duración_recorrido” ya cuenta con la información, pero expresada en segundos. Por lo tanto, sólo nos limitaremos a traducirla en minutos.
bicis_2020 <- bicis_2020 %>%
mutate(duracion_minutos = round(as.numeric(as.duration(duracion_recorrido), "minutes"),2))
¿Cúantos minutos duran los viajes en bicicleta iniciados en el microcentro en promedio?
paste(round(mean(bicis_2020$duracion_minutos),2), " minutos es el promedio de duracion de viajes. Sin embargo, la mediana está en ", round(median(bicis_2020$duracion_minutos),2), " minutos, por lo que reconocemos que la distribución de los datos tiene una cola hacia la derecha")
## [1] "22.13 minutos es el promedio de duracion de viajes. Sin embargo, la mediana está en 16.43 minutos, por lo que reconocemos que la distribución de los datos tiene una cola hacia la derecha"
Ahora, grafiquemos para ver como se distribuyen los viajes según su duración-
ggplot(bicis_2020, aes(duracion_minutos)) +
geom_histogram(bins=50, fill="orange", alpha=.5, color="black")+
labs(x="Duración en minutos",
y="Cantidad de viajes",
title="¿Cómo es la distribución de viajes según su duración?",
subtitle = "Expresado en escala logarítica",
caption="Fuente: GCBA")+
scale_y_log10()+
scale_x_log10()+
theme_minimal()
## Warning: Transformation introduced infinite values in continuous y-axis
## Warning: Removed 12 rows containing missing values (geom_bar).
Notamos la presencia de valores extremos, tanto superiores como inferiores. Esto puede deberse, por ejemplo, a una falla en la aplicación, o a usuarios que desbloquearon una bicicleta y la devolvieron instáneamente. Un análisis profundo sobre la duración de los viajes debería contemplar la limpieza de dichos outliers y trabajar exclusivamente con valores representativos.
ggplot(bicis_2020) +
geom_bar(aes(x = mes), fill="orange", alpha=.5, color="black") +
scale_y_continuous(limit = c(0, 20000), breaks = seq(0, 20000, 5000))+
labs(title = "Cantidad de viajes en bicicleta en el Microcentro",
subtitle = "Año 2020",
x = "Mes",
y = "Viajes",
caption = "Fuente: BA Data")+
theme_minimal()+
theme(axis.text.x = element_text(face="bold", size = 7))
Curiosamente, a partir del mes de agosto (a 5 meses de haber arrancado la cuarentena), el volumen de viajes en bicicleta en el microcentro porteño supera al valor de enero, el máximo en el año previo al inicio de la pandemia. Sin embargo, ello no quiere decir que más gente use la bicicleta que en niveles pre pandemicos. Es importante mencionar que, año tras año, durante los primeros meses del calendario, la circulación en esta área geografica se reduce significativamente en comparación con su volumen habitual del resto del ciclo anual. Por ello, para poder llegar a una conclusión más profunda sobre los parámetros de uso, debiese de compararse la información con la del año 2019 (A los fines de este trabajo, omitiremos este paso por el momento).
Veamos que sucede a lo largo de las días de la semana.
ggplot(bicis_2020) +
geom_bar(aes(x = dia), fill="orange", alpha=.5, color="black") +
scale_y_continuous(limit = c(0, 20000), breaks = seq(0, 20000, 5000))+
labs(title = "Cantidad de viajes en bicicleta en el Microcentro",
subtitle = "Año 2020",
x = "Día",
y = "Viajes",
caption = "Fuente: BA Data")+
theme_minimal()
La distribución de viajes por día marca un claro contraste entre los días de semana y los fin de semanas. Es en los primeros donde se observa un mayor nivel de viajes, a un volumen similar en cada uno de los 5 días.
Repitamos el mismo análisis, pero por horas.
ggplot(bicis_2020)+
geom_bar(aes(x = hora), fill="orange", alpha=.5, color="black") +
scale_x_continuous(limit = c(-1, 24), breaks = seq(0, 23, 1))+
labs(title = "Cantidad de viajes en bicicleta en el Microcentro",
subtitle = "Año 2020",
x = "Horas",
y = "Viajes",
caption = "Fuente: BA Data")+
theme_minimal()
Durante el día, el mayor volumen de viajes en bicicleta ocurre a las 12 hs. y se mantiene en niveles similares hasta las 16 hs., cuando comienza a decaer. Como contrapartida, el mínimo volumen se registra entre 3 y 4 de la mañana.
Ahora veamos las estaciones de bicicleta que más fueron utilizadas en el microcentro durante los meses de la pandemia.
ggmap(mapamicrocentro) +
geom_sf(data=microcentro, aes(fill=MANZANA), fill="gray", alpha=.5, show.legend = FALSE, inherit.aes = FALSE)+
stat_density_2d(data = bicis_2020,
aes(x = lon, y = lat,
fill = stat(level)), alpha = 0.6, geom = "polygon", contour = TRUE) +
labs(title="Estaciones de ecobicis en el microcentro",
subtitle="Año 2020",
caption= "Fuente: BA Data",
fill="Cantidad de usos")+
theme_void()+
scale_fill_viridis_c(option="magma", direction=-1, alpha=.6)+
theme(plot.title = element_text(hjust = 0.2),
plot.subtitle = element_text(size = 11, hjust = 0.1),
legend.title = element_text(size=9))
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.
El gráfico muestra que durante el 2020 se utilizaron más las estaciones de ecobicis del lado oeste de la Av. 9 de Julio que en la city porteña (algo que a simple vista se correlaciona con los usos de suelos algo direfentes entre ambos sectores del Microcentro). En ese sentido, es particularmente notable la importancia de la estación de Congreso.
Cabe descatar que no se genera un mapa de calor uniforme que cubra toda la superficie porque el agrupamiento de datos puntuales se da pares de coordenadas distantes entre sí (correspondientes a las estaciones).
Ahora veamos como fue la intensidad de usos a lo largo de los meses.
ggmap(mapamicrocentro) +
geom_bin2d(data = bicis_2020, aes(x = lon, y = lat), bins=7, alpha=.7)+
scale_fill_viridis_c()+
labs(title="Estaciones de ecobicis en el microcentro",
subtitle="Año 2020",
caption= "Fuente: BA Data",
fill="Cantidad de usos")+
facet_wrap(~mes)+
theme_void()+
theme(plot.title = element_text(hjust = 0.1),
plot.subtitle = element_text(size = 11, hjust = 0.05),
legend.title = element_text(size=9))
Al desagregar los datos por mes, notamos que la alta frecuencia de usos de bicis en la estación de Congreso se corresponden principalmente con el mes de Noviembre, momento en el cual se produjeron el mayor uso de las estaciones de ecobicis en el Microcentro.
A su vez, resulta interesante observar como, a medida que los contagios retroceden, las restricciones disminuyen y la actividad aumenta, incrementa el uso de las estaciones de ecobicis. Sin embargo, se muestra un claro clivaje entre las estaciones al oeste de la Av. 9 de Julio y las de la city porteña. Mientras que las primeras muestran un incremento paulatino en la actividad a través de los meses, las segundas parecen mantener un grado de actividad (bajo) a lo largo de todo año.
En este marco, la provisión de nuevos espacios verdes en el microcentro porteño puede resultar en un foco de atracción para las personas y traer mayor dinamismo al área deprimida.